#include <iostream>
#include <string>
using namespace std;
/**
 * func模板定义
 * @tparam T1 模板类型参数1
 * @tparam T2 模板类型参数2
 * @param t1 函数参数1
 * @param t2 函数参数2
 */
template <typename T1,typename T2>
void func(T1 t1,T2 t2)
{
    cout<<"func模板的通用版本"<<endl;
}

/**
 * func的重载版本
 * @tparam T1 模板类型参数1
 * @param t1 函数参数1
 * @param t2 函数参数2
 */
template <typename T1>
void func(T1 t1,string t2)
{
    cout<<"func模板的重载版本？？？"<<endl;
}
/*
 * 编译错误，不允许偏特化
template <typename T1,typename T2>
void func<T1>(T1 t1,string t2)
{
    cout<<"通用函数模板"<<endl;
}
template <typename T1,typename T2>
void func<T1,T2*>(T1 t1,T2 t2)
{
    cout<<"通用函数模板"<<endl;
}*/
/**
 * func的全特化版本
 * @param t1 函数参数1
 * @param t2 函数参数2
 */
template <>
void func<>(int t1,string t2)
{
    cout<<"func模板的全特化版本"<<endl;
}

int main()
{
    string a="fdsj";//"fdsj"的类型为A5_c，而不是string
    //std::cout<<"参数值："<<"fdhsj"<<" , 类型: "<< typeid("fdsfdsf").name()<<std::endl;
    func(true,8.453);
    func(4,a);
    func(3.454,a);
    std::cout<<"参数值："<<a<<" , 类型: "<< typeid(a).name()<<std::endl;
    return 0;
}
